<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Created by PhpStorm.
 * The project “dev”
 * File name “Role_model.php”
 *
 * User: znx
 * Company: 思议创想
 * Q  Q: 865303386
 * Site: www.siyi360.com
 *
 * Date: 2017-02-09
 * Time: 15:25
 */
class Role_model extends CI_Model {
    /**
     * get_all_role
     * 获取全部系统角色数据
     *
     * @return mixed
     */
    public function get_all_role()
    {
        return $this->db->order_by('role_id ASC')->get('admin_role')->result_array();
    }

    /**
     * get_single_role
     * 获取指定id的单条系统角色数据
     *
     * @param int $role_id 角色id
     * @return mixed
     */
    public function get_single_role($role_id)
    {
        $table = $this->db->dbprefix('admin_role');
        return $this->db
            ->query('select * from ' . $table . ' where role_id=' . $role_id)
            ->row_array();
    }

    /**
     * get_auth
     * 获取权限数据
     *
     * @return array
     */
    public function get_auth()
    {
        // 获取管理后台菜单一级菜单数据作为权限资源分组
        $menu = $this->db
            ->select('menu_id, menu_name')
            ->where('menu_parentid', 0)
            ->order_by('menu_sort DESC')
            ->get('admin_menu')
            ->result_array();

        // 遍历菜单数据、权限资源数据组成完成的权限数组
        $data = array();
        foreach ($menu as $key=>$val) {
            // 获取指定权限资源分组id的权限资源数据
            $acl = $this->db
                ->where('acl_group', $val['menu_id'])
                ->order_by('acl_id ASC')
                ->get('admin_acl')
                ->result_array();
            $acl_list = array();
            foreach ($acl as $acl_key=>$acl_val) {
                $acl_list[] = $acl_val;
            }

            $val['acl'] = $acl_list;
            $data[] = $val;
        }

        return $data;
    }

    /**
     * role_save
     * 保存系统角色到数据库
     *
     * @return array
     */
    public function role_save()
    {
        // 获取表单数据
        $form = $this->input->post();

        $data = array(
            'role_name' => $form['role_name'],
            'role_acl' => implode(',', $form['role_acl']),
            'role_status' => $form['role_status'],
            'role_remake' => $form['role_remake']
        );

        // 判断主键ID是否存在，存在则表示更新数据
        if (!array_key_exists('role_id', $form)) {
            // 新增数据
            $req = $this->db->insert('admin_role', $data);
        } else {
            // 更新数据
            $req = $this->db->where('role_id', $form['role_id'])->update('admin_role', $data);
        }

        if ($req) {
            return array('status'=>1, 'msg'=>'操作成功！', 'result'=>array('jumpUrl'=>site_url('system/Role/index')));
        } else {
            return array('status'=>0, 'msg'=>'操作失败！', 'result'=>'');
        }
    }

    /**
     * role_delete
     * 删除指定id的系统角色数据
     *
     * @return array
     */
    public function role_delete()
    {
        $role_id = $this->input->get('role_id');

        // 查询需要删除的角色下是否有隶属成员
        $user = $this->db
            ->from('admin_user')
            ->where('user_role', $role_id)
            ->count_all_results();

        if ($user) return array('status'=>-1, 'msg'=>'该角色下还有隶属成员存在，不能删除', 'result'=>'');

        $req = $this->db->where('role_id',$role_id)->delete('admin_role');

        if ($req) {
            return array('status'=>1, 'msg'=>'操作成功！', 'result'=>'');
        } else {
            return array('status'=>0, 'msg'=>'操作失败！', 'result'=>'');
        }
    }
}